package com.auth.manager.security.login;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
 * @version 1.0.0
 * @Date: 2022/4/27 10:41
 * @Author ZhuYouBin
 * @Description 自定义认证管理器
 */
@Component // 放入IOC容器里面
public class LoginManager implements AuthenticationManager {

    // 认证服务提供者
    private LoginProvider loginProvider;

    // 构造方法注入Bean实例
    public LoginManager(LoginProvider loginProvider) {
        this.loginProvider = loginProvider;
    }

    // 这个方法就是进行认证的,需要调用Provider进行真正的认证逻辑处理
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        /**
         * 这个方法需要做什么逻辑呢？？？
         * 1、调用 Provider 的认证方法即可
         */
        // 调用认证服务
        Authentication authenticate = loginProvider.authenticate(authentication);
        if (Objects.isNull(authenticate)) {
            throw new AuthenticationServiceException("用户名或密码不正确");
        }
        return authenticate;
    }

}
